package socket;


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/***
 * udp协议: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立连接
 *     b、每个数据报的大小在限制64k内
 *     c、因无连接,是不可靠协议
 *     d、不需要建立连接,速度快
 * */

class UdpServer{
    /**
     * 服务端
     * */
    public static void main(String[] args) throws Exception{
        System.out.println("upd服务端启动.....");
        //1.创建服务器端端口号 ， 默认使用本机ip
        DatagramSocket server = new DatagramSocket(8080);
        //2.定义字节数组，创建数据的客户端数据接收包
        byte[] bytes = new byte[1024];
        DatagramPacket pack = new DatagramPacket(bytes,bytes.length);
        //3.接受客户端请求，将数据封装给数据包，如果客户端不发送请求，那么就会发生阻塞，不会继续执行
        server.receive(pack);
        System.out.println("来源ip地址："+pack.getAddress().getHostAddress() +" , 端口号："+pack.getPort());
        //4.获取客户端发送内容，响应
//        String content = new String(bytes,bytes.length);
        String content = new String(pack.getData(),"GBK");
        System.out.println(content);
        //5.关闭服务端
        server.close();
    }
}

public class UdpClient {
    /**
     * 客户端
     * */
    public static void main(String[] args) throws Exception{
        System.out.println("udf客户端启动.....");
        //1.不传入端口号，创建一个客户端
        DatagramSocket client = new DatagramSocket();
        //2.创建数据
        String name = "你好，我是李博飞的客户端";
        byte[] bytes = name.getBytes("GBK");
        //3.创建数据包发送数据
        DatagramPacket pack = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("127.0.0.1"),8080);
        //4.发送消息
        client.send(pack);
        client.close();
    }
}
